/**
 * 
 */
package es.uab.es2.TimeTracker.nucli;

import org.apache.log4j.Logger;

/** 
 * Classe encarregada de generar l'autonum�ric de identificadors 
 * de les activitats, tasques i  projectes.
 * Aquesta classe est� implementada per un patr� de disseny 
 * <code>Singleton</code>
 * @author Jes�ss Berm�dez, Ricard Figueras i Abel Rodr�guez.
 * @version 30-mar�
 */
public final class Identificador {
    
    //********************** Constructors **********************
    /**
     * Constructor privat que es crea per realiztar el patr� de 
     * disseny Singleton
     * amb aix� acoseguim controlar la instancia de aquesta clase.
     */
    private Identificador() {
        
    }
    
    
    //********************** Class Atributes **********************
    /** 
	 * Identificador de Activitats que es assignat 
	 * cada vegada que es crea una nova activitat.
	 * Per defecte te valor 1.
	 * @uml.property name="contador"
	 */
    private int contador = 0;
    
    /**
     * Instancia del identifiador amb el cual controlem 
     * la creaci� de objectes d'aquesta clase .
	 * @uml.property  name="instancia"
	 */
	private static Identificador instancia = null;
	
	/**
     *Eencarregat de controlar el Debbuger d'aquesta classe. 
     *Aquest <code>Logguer</code> prove de la classe <code>Logger</code>
     *de la llibreria <code>Loj4j</code> 
     *@uml.property name="logger"
     */
    private static Logger logger = Logger.getLogger(Identificador.class);
    
    //********************** Getters & Setters **********************
    		
        /**
         * Getter of the property <tt>Idenificador</tt>.
         * @return  Returns instancia.
         * @uml.property  name="Identificador"
         */
        public static Identificador getInstancia() {
            if (instancia == null) {
                instancia = new Identificador();
                //logger.info("Realizando singleton");
            }
            return instancia;
        }

        /**
         * Setter of the property <tt>Instancia</tt>.
         * @return   Returns the instancia.
         * @uml.property   name="instancia"
         */
        public void setInstancia(final Identificador iInstancia) {
            Identificador.instancia = iInstancia;
        }
        
        /** 
         * Getter of the property <tt>Contador</tt>.
         * @return  Returns contador.
         * @uml.property  name="contador"
         */
        public int getContador() {
            if (Asserts.asserts[0]) {
                assert (contador >= 0);
            }
            contador = contador + 1;
            return contador;
        }
        
		/**
		 * Setter of the property <tt>contador</tt>.
		 * @return   Returns the contador.
		 * @uml.property   name="contador"
		 */
		public  void setContador(final int iContador) {
			this.contador = iContador;
			
		}

		
		
}
